package site.addzero.cli.autoinit.mac

import org.koin.core.annotation.Single
import site.addzero.cli.packagemanager.INSTALL_BREW_CMD
import site.addzero.cli.platform.PlatformTools.isMac
import site.addzero.cli.platform.PlatformTools.readBoolWithTrue
import site.addzero.cli.platform.runBoolean
import site.addzero.cli.platform.runCmdInteractive


/**
 * Homebrew 自动初始化类
 * 负责检查 Homebrew 是否安装，如未安装则提示用户安装
 */
@Single
class AutoInitHomebrew {
    init {
        initializeHomebrew()
    }

    /**
     * 初始化 Homebrew 配置
     */
    private fun initializeHomebrew() {
        // 检查是否为 Mac 系统
        if (!isMac()) return

        // 检查 Homebrew 是否安装
        if (isHomebrewInstalled()) {
            println("Homebrew 已安装")
            return
        }

        // 提示用户安装 Homebrew
        val installHomebrew = readBoolWithTrue("Homebrew 未安装，是否安装？")
        if (installHomebrew == true) {
            installHomebrew()
        }
    }

    /**
     * 检查 Homebrew 是否已安装
     */
    private fun isHomebrewInstalled(): Boolean {
        return "which brew 2>/dev/null".runBoolean()
    }

    /**
     * 安装 Homebrew
     */
    private fun installHomebrew() {
        println("正在安装 Homebrew...")
        println("注意：安装过程需要管理员权限，可能需要您输入系统密码")
        println("请确保当前用户在管理员组中")

        val installCommand =
            INSTALL_BREW_CMD.trimIndent()
        val result = installCommand.runCmdInteractive()

        if (result.isSuccess()) {
            println("Homebrew 安装成功")
        } else {
            println("Homebrew 安装失败: ${result.error}")
            println("错误信息: ${result.output}")
            println("\n解决方法:")
            println("1. 您可以手动运行以下命令来安装 Homebrew:")
            println(INSTALL_BREW_CMD)
            println("2. 确保您的用户账户具有管理员权限")
            println("3. 如果仍然失败，请访问 https://brew.sh/ 获取更多安装帮助")
        }
    }
}
